// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "media/cast/test/skewed_single_thread_task_runner.h"

#include "base/logging.h"
#include "base/time/tick_clock.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace media {
namespace cast {
    namespace test {

        SkewedSingleThreadTaskRunner::SkewedSingleThreadTaskRunner(
            const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
            : skew_(1.0)
            , task_runner_(task_runner)
        {
        }

        SkewedSingleThreadTaskRunner::~SkewedSingleThreadTaskRunner() { }

        void SkewedSingleThreadTaskRunner::SetSkew(double skew)
        {
            skew_ = skew;
        }

        bool SkewedSingleThreadTaskRunner::PostDelayedTask(
            const tracked_objects::Location& from_here,
            const base::Closure& task,
            base::TimeDelta delay)
        {
            return task_runner_->PostDelayedTask(
                from_here,
                task,
                base::TimeDelta::FromMicroseconds(delay.InMicroseconds() * skew_));
        }

        bool SkewedSingleThreadTaskRunner::RunsTasksOnCurrentThread() const
        {
            return task_runner_->RunsTasksOnCurrentThread();
        }

        bool SkewedSingleThreadTaskRunner::PostNonNestableDelayedTask(
            const tracked_objects::Location& from_here,
            const base::Closure& task,
            base::TimeDelta delay)
        {
            return task_runner_->PostNonNestableDelayedTask(
                from_here,
                task,
                base::TimeDelta::FromMicroseconds(delay.InMicroseconds() * skew_));
        }

    } // namespace test
} // namespace cast
} // namespace media
